// 引入 TinyPinyin.js（需要先在 HTML 中通过 <script> 标签加载 TinyPinyin 库）
import Pinyin from "tiny-pinyin";

/**
 * 将字符串转为拼音的首字母缩写形式。
 * @param {string} str - 输入字符串。
 * @returns {string} - 拼音首字母字符串。
 */
export function getInitials(str) {
    if (typeof str !== 'string') return '';
    return Array.from(str)
        .map(char => Pinyin.convertToPinyin(char, '', true)[0]) // 获取每个字符的拼音首字母
        .join('');
}

/**
 * 模糊匹配函数，支持中英文和拼音首字母缩写匹配。
 * @param {Array} array - 要搜索的数组。
 * @param {string} key - 需要匹配的对象键。
 * @param {string} query - 搜索关键字。
 * @returns {Array} - 匹配的结果数组。
 */
export function fuzzyMatch(array, key, query) {
    if (array.length <= 1 || typeof key !== 'string' || typeof query !== 'string') {
        throw new Error('Invalid input');
    }

    const normalizedQuery = query.trim().toLowerCase();
    return array.filter(item => {
        if (!item[key]) return false;

        const value = String(item[key]).toLowerCase();

        // 完全匹配或包含匹配
        if (value.includes(normalizedQuery)) {
            return true;
        }

        // 拼音首字母缩写匹配
        const initials = getInitials(item[key]);
        if (initials.toLowerCase().includes(normalizedQuery)) {
            return true;
        }

        return false;
    });
}

if(0) {
    // 测试示例
    const data = [
        {name: 'Beijing', id: 1},
        {name: 'Shanghai', id: 2},
        {name: 'Guangzhou', id: 3},
        {name: '深圳', id: 4},
        {name: '北京', id: 5},
        {name: '广东省', id: 6},
        {name: "发射A", id: 7},
        {name: "跟踪相机图像发送停止", id: 8},
    ];

    console.log(fuzzyMatch(data, 'name', 'bj')); // 匹配北京和Beijing
    console.log(fuzzyMatch(data, 'name', 'gz')); // 匹配Guangzhou
    console.log(fuzzyMatch(data, 'name', '深')); // 匹配深圳
    console.log(fuzzyMatch(data, 'name', 'gd')); // 匹配广东省
    console.log(fuzzyMatch(data, 'name', 'fsa')); // 匹配广东省
    console.log(fuzzyMatch(data, 'name', 'fstz')); // 匹配广东省

}
